Labview 多循环同时运行的变量初始化和同步问题 您所在的位置:网站首页 labview while循环次数 Labview 多循环同时运行的变量初始化和同步问题

Labview 多循环同时运行的变量初始化和同步问题

2023-12-27 08:50| 来源: 网络整理| 查看: 265

1.问题背景

    在Labview编程过程中,有时候会使用多while循环同时运行,以获得更好的实时性,尤其是做数据采集的时候。笔者在一个应用实例中出现Stop变量无法同步的问题,经过调试找出解决方案,记录一下并作为学友们的参考。

    以下是为这个问题设计的一个demo程序。其功能是在两个同时运行的while中,定时更新计数值i,并且可以使用同一个stop按键停止。

    这里边使用“局部变量”来做变量同步,要注意的是,Labview的局部变量作用域是当前vi,C的局部变量作用域是当前函数。局部变量在vi里边相当于一个游离的X,非常方便对数据进行操作,同时,副作用是可能破坏程序逻辑。

2.现象分析

   图1是初步设计的程序。注意这个时候是不能正常运行的,因为stop按键的动作属性属性(图2,按键时改变并反弹)不匹配。

图1 初步设计的程序

 

修改为图3的按键动作属性,即可正常运行。

 

图3 采样局部变量时按键属性需要设置为“按键时值改变”

但是,这样的改变带来的问题就是,当程序停止后,无法再重新运行,因为stop被保持为true。

改进的方法是在初始化的时候,同样通过局部变量操作将stop设为false。图4

图4 加入初始化操作

图5 加入对stop初始化后的运行结果

到此,并不是完美的。因为在一个比较复杂的程序中,程序的初始化阶段可能有很多操作,也可能导致一些延时。图6模拟了我的程序的初始化的情况。

图7为这种情况下所出现的问题:一个循环不工作了!!

 

图6 对复杂程序变量初始化的模拟

 

图7 根据图6对复杂情况初始化的模拟,结果发现,一个循环不工作了!

出现这个问题的原因是:

如图6的初始化方法,当初始化时延较大的时候,第一个循环在stop变量还没有被初始化情况下,就开始运行了,结果就是直接退出。而第二个循环是可以正常运行的。

图8是推荐的正确初始化方法,通过顺序结构,确保初始化完整地完成以后,再进入各个循环的执行环节。

图8 正确的初始化方法,通过顺序结构进行执行顺序控制,确保初始化完整执行

图9 正确的运行结果

 图9 为正确初始化的运行结果。

一个简单的问题的分析,希望对大家有所帮助。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有